/**
 * <p>Bit Manipulation.</p>
 *
 * <p>Basic operations:</p>
 * <ul>
 *     <li>{@code x & (x-1)}: x with the lowest set bit cleared: {@code 101100 & (101100 - 1) = 101000}.</li>
 *     <li>{@code x & ~(x-1)}: extract the lowest bit: {@code 101100 & ~(101100 - 1) = 100}</li>
 *     <li>{@code x & (x+(1<<n))}: x with the run of bits starting from n cleared.</li>
 *     <li>{@code x & ~(x+(1<<n))}: the run of set bits starting from n</li>
 *     <li>{@code x | (x+1)}: x with the cleared bit set.</li>
 *     <li>{@code x | ~(x+1)}: extract the lowest cleared bit of x.</li>
 *     <li>{@code x | (x-(1<<n))}: the run of bits starting from n set.</li>
 *     <li>{@code x | ~(x-(1<<n))}: the lowest run of cleared bits in x, starting bit n.</li>
 *
 *
 * </ul>
 *
 *
 *
 * @author Trung Phan
 */
package net.tp.algo.bit;